package 代码题.排列组合题目;

/**
 * 不重复字符的全排列
 */
public class AllPermutations {

    /**
     * 思路：递归加回溯
     * n个字符的全排列等于第1个字符+（n-1）个字符的全排列
     *
     * @param args
     */
    public static void main(String[] args) {
        char[] array=new char[]{'a','b','c'};
        helper(array,0);
    }

    public static void helper(char[] array, int cur){
        if ( cur == array.length - 1 ){
            System.out.println(array);
        }
        else {
            for ( int i = cur ; i < array.length ; i ++ ){
                swap(array,cur,i);
                helper(array,cur+1);  //固定第一个字符，对后面所有字符全排列
                swap(array,i,cur);
            }
        }
    }

    public static void swap(char[] array,int first,int second){
        char tmp=array[first];
        array[first]=array[second];
        array[second]=tmp;
    }

}
